import axios from 'axios';
import Qs from 'qs';
import useHttpStore from '../stores/http/index.js'
//全局定义一个取消请求的数组
window.cancelRequest = new Map()
//获取产品配置
const productConfig = window.productConfig
const baseURL = productConfig.baseUrl

//创建一个axios实例
const service = axios.create({
  baseURL: baseURL,//请求发送的服务器地址
  headers: {
    Pragma: 'no-cache',//缓存是否开启
    'Content-Type': 'application/json',//请求头
  },
  transformRequest: [function (data,headers) { //请求发送到服务器之前修改请求数据,data是请求数据,headers是请求头
    if(!headers['Content-Type']){//如果没有请求头
      data = Qs.stringify(data)//直接返回一个用&连接的字符串(query参数的形式)
    }
    switch (headers['Content-Type'].toLowerCase()) {
      // 返回得到一个对象(可以为json或者是一个数组)
      case 'application/json;charset=utf-8': {
        return JSON.stringify(data); //将数据转换为json字符串
      }
      // 如果当前发送的是formData属性的配置时,直接将当前的data返回,不做任何的处理(默认当前请求头的内容为formData格式)
      case 'multipart/form-data;charset=utf-8': {
        return data; //直接返回data
      }
      // 默认返回Qs序列化后的内容,防止内容没有进行处理
      default: {
        return Qs.stringify(data);
      }
    }
  }]
})

axios.defaults.baseURL = baseURL;

//请求拦截器
service.interceptors.request.use(config => {
  const httpStore = useHttpStore()
  //添加等待请求
  httpStore.addPendingNum() 
  httpStore.addRequestSum()
  return config
}, error => {
  return Promise.reject(error)
})

//响应拦截器
service.interceptors.response.use(response => {
  const httpStore = useHttpStore()
  //删除等待请求
  httpStore.deletePendingNum()
  return response
}, error => {
  //删除等待请求
  const httpStore = useHttpStore()
  httpStore.deletePendingNum()
  return Promise.reject(error)
})





const httpRequest={
   // 获取表格数据
    getTableData(){
        return service({
          url: '/api/v1/users/1',
            method: 'get'
        })
    },
    //获取表格升级成websock的接口
    getTableDataToWebSocket(){
        return service({
            url: '/api/v1/users/1',
            method: 'get'
        })
    }
}

export default httpRequest //导出请求方法的集合